// abstract base class interface for game objects
// that can update, have a health value, can render
// to the screen, etc

#pragma once

#include "RenderInfo.h"
#include "Physics/rigidbody.h"
#include "ObjectTypes.h"

class FuriousTourist;

class GameObject
{
public:
	// function to render the object to the screen. Takes a RenderInfo object
	// which holds all of the relevant information (FX data) so we can
	// draw with DirectX
	virtual void Render(RenderInfo ri) = 0;

	// Return the RigidBody object of the parent. This is needed in various places.
	virtual physics::RigidBody* GetBody(void) = 0;

	// gets the material type of the object
	virtual ObjectMaterial GetMaterial(void) = 0;

	// activates special abilities. Intended for weapon-type game objects.
	// needs to access the game itself to affect game objects. A quick hack
	// but useful for our needs.
	virtual void SpecialAbility(FuriousTourist *game) {};
	virtual void SpecialAbility2(void) {};

	// returns the type of object. Unique to each child class.
	virtual UINT GetType(void) = 0;

	// Mutators/Accessors for the health property of the GameObject
	// Some objects may not have a health property and should return false
	// from the HasHealth() function
	virtual int GetHP(void) = 0;
	virtual void SetHP(int h) = 0;
	virtual bool HasHealth(void)
	{
		// all objects return false unless explicitly overridden
		return false; 
	}

	virtual void ToggleShowHealth(void) = 0;
};

